﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CAOS.Entity;
using CAOS.Facade;
using CAOS.UnityOfWork;

namespace CAOS.Test
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class TesteSistema
    {
        //UnityOfWork unidadeDeTrabalho = new UnityOfWork();

        //public TesteSistema()
        //{
        //    //
        //    // TODO: Add constructor logic here
        //    //
        //}

        //[TestMethod]
        //public void TesteInserirSistema()
        //{
        //    Sistema sistema = new Sistema() { Sigla = "SIG", Nome = "Sistema de Informações Gerenciais", CodigoAutenticacao = "SIG1234" };

        //    unidadeDeTrabalho.SistemaRepository.Insert(sistema);
        //    unidadeDeTrabalho.Save();

        //    var a = unidadeDeTrabalho.SistemaRepository.GetByCondition(s => s.Sigla == "SIG" && s.CodigoAutenticacao == "SIG1234");
        //    Assert.IsNotNull(a);
        //}

        //[TestMethod]
        //public void TesteListarSistemas()
        //{
        //    var a = new SistemaFacade().ListarSistemas();
        //    Assert.IsNotNull(a);
        //}

        //[TestMethod]
        //public void TestarAutenticarSistema()
        //{
        //    SistemaFacade sistemaFacade = new SistemaFacade();
        //    Sistema sistema = new Sistema() { Sigla = "FGS", Nome = "Ferramenta de Gerenciamento de Softwares", CodigoAutenticacao = "FGS1234" };

        //    unidadeDeTrabalho.SistemaRepository.Insert(sistema);
        //    unidadeDeTrabalho.Save();

        //    var a = new SistemaFacade().SistemaAutenticado(new Sistema() { Sigla = "FGS", CodigoAutenticacao = "FGS1234" });
        //    Assert.IsTrue(a);
        //}

        //[TestMethod]
        //public void TesteCriarPapel()
        //{
        //    Sistema sistema = new Sistema() { Sigla = "SIGs", Nome = "Sistema de Informações Gerenciais2", CodigoAutenticacao = "SIG1234" };
        //    Papel papel = new Papel() { Nome = "Administrador", Sistema = sistema };
        //    unidadeDeTrabalho.PapelRepository.Insert(papel);
        //    unidadeDeTrabalho.Save();

        //    var a = unidadeDeTrabalho.PapelRepository.GetByCondition(p => p.Nome == "Administrador" && p.Sistema.SistemaID == sistema.SistemaID, "Sistema");
        //    Assert.IsNotNull(a);
        //}

        //[TestMethod]
        //public void TesteCriarRecurso()
        //{
        //    Sistema sistema = new Sistema() { Sigla = "SIGs", Nome = "Sistema de Informações Gerenciais3", CodigoAutenticacao = "SIG1234" };
        //    Recurso rec = new Recurso() { Nome = "Teste", Sistema = sistema };
        //    unidadeDeTrabalho.RecursoRepository.Insert(rec);
        //    unidadeDeTrabalho.Save();

        //    var a = unidadeDeTrabalho.RecursoRepository.GetByCondition(r => r.Nome == "Teste" && r.Sistema.SistemaID == sistema.SistemaID, "Sistema");
        //    Assert.IsNotNull(a);
        //}

        //[TestMethod]
        //public void TesteAssociarRecursoFilho()
        //{
        //    Sistema sistema = new Sistema() { Sigla = "SIG4s", Nome = "Sistema de Informações Gerenciais5", CodigoAutenticacao = "SIG1234" };
        //    Recurso rec = new Recurso() { Nome = "Teste", Sistema = sistema };
        //    rec.RecursosFilhos = new List<Recurso>();
        //    rec.RecursosFilhos.Add(new Recurso() { Nome = "RecursoFilho", Sistema = sistema });

        //    unidadeDeTrabalho.RecursoRepository.Insert(rec);
        //    unidadeDeTrabalho.Save();

        //    var a = unidadeDeTrabalho.RecursoRepository.GetByCondition(r => r.Nome == "Teste" && r.Sistema.SistemaID == sistema.SistemaID, "Sistema");
        //    Assert.IsNotNull(a);
        //}

        //[TestMethod]
        //public void TesteAssociarRecursoAPapel()
        //{
        //    Sistema sistema = new Sistema() { Sigla = "SIG5s", Nome = "Sistema de Informações Gerenciais5", CodigoAutenticacao = "SIG1234" };
        //    Recurso rec = new Recurso() { Nome = "TestePermissao", Sistema = sistema };
        //    Papel papel = new Papel() { Nome = "Administradores", Sistema = sistema };

        //    papel.RecursosPermitidos = new List<Recurso>();
        //    papel.RecursosPermitidos.Add(rec);

        //    unidadeDeTrabalho.PapelRepository.Insert(papel);
        //    unidadeDeTrabalho.Save();

        //    var a = unidadeDeTrabalho.PapelRepository.GetByCondition(p => p.Nome == "Administradores" && p.Sistema.SistemaID == sistema.SistemaID, "Sistema");
        //    Assert.IsNotNull(a.RecursosPermitidos);
        //}

        //[TestMethod]
        //public void TesteDeletarSistemaComDadosRelacionados()
        //{
        //    Sistema sistema = new Sistema() { Sigla = "SIG6s", Nome = "Sistema de Informações Gerenciais5", CodigoAutenticacao = "SIG1234" };
        //    Recurso rec = new Recurso() { Nome = "TestePermissao", Sistema = sistema };
        //    Papel papel = new Papel() { Nome = "Administradores", Sistema = sistema };

        //    papel.RecursosPermitidos = new List<Recurso>();
        //    papel.RecursosPermitidos.Add(rec);

        //    unidadeDeTrabalho.PapelRepository.Insert(papel);
        //    unidadeDeTrabalho.Save();

        //    unidadeDeTrabalho.SistemaRepository.Delete(sistema);
        //    unidadeDeTrabalho.Save();

        //    var a = unidadeDeTrabalho.SistemaRepository.GetByCondition(s => s.Sigla == "SIG6s" && s.CodigoAutenticacao == "SIG1234");
        //    Assert.IsNull(a);
        //}

        //[TestMethod]
        //public void TesteAutenticarUsuarioSucesso()
        //{
        //    Sistema sistema = new Sistema() { Sigla = "SIG7s", Nome = "Sistema de Informações Gerenciais5", CodigoAutenticacao = "SIG1234" };
        //    Usuario usuario = new Usuario() { Nome = "Felipe", Login = "Phill", Senha = "1234" };

        //    AcessoUsuarioSistema aus = new AcessoUsuarioSistema() { Sistema = sistema, Usuario = usuario, IsAdministrador = true };

        //    unidadeDeTrabalho.AcessoUsuarioSistemaRepository.Insert(aus);
        //    unidadeDeTrabalho.Save();

        //    var acesso = unidadeDeTrabalho.AcessoUsuarioSistemaRepository
        //                                                        .GetByCondition(p => p.Sistema.SistemaID == sistema.SistemaID &&
        //                                                                        p.Usuario.UsuarioID == usuario.UsuarioID);

        //    Assert.IsNotNull(acesso);
        //}

        //[TestMethod]
        //public void UsuarioPossuiPermissaoAcesso()
        //{
        //    AcessoUsuarioSistema aus = new AcessoUsuarioSistema();

        //    aus.Usuario = new Usuario() { Nome = "Felipes", Login = "Phills", Senha = "1234" };
        //    aus.Sistema = new Sistema { Nome = "SIG8s", CodigoAutenticacao = "SIG1234" };

        //    aus.Papeis.Add(new Papel() { Nome = "TestePapel", });
        //    aus.Papeis[0].RecursosPermitidos.Add(new Recurso() { Nome = "Recurso", Sistema = aus.Papeis[0].Sistema });

        //    unidadeDeTrabalho.AcessoUsuarioSistemaRepository.Insert(aus);
        //    unidadeDeTrabalho.Save();

        //    bool possuiAcesso = new Facade.UsuarioFacade().VerificarPermissaoRecurso("SIG8s", aus.Usuario.Login, "Recurso");
        //    Assert.IsTrue(possuiAcesso);
        //}
    }
}
